package com.wtgroup.demo.leetcode.q027;

import com.wtgroup.demo.common.util.Tools;

import javax.sound.midi.Soundbank;
import java.util.Arrays;

/**
 * @author dafei
 * @version 0.1
 * @date 2021/4/7 10:30
 */
public class Q027_M1 {

    public static void main(String[] args) {
        int[][] inputs = {
                {3, 2, 2, 3},
                {0, 1, 2, 2, 3, 0, 4, 2}
        };
        int[] vals = {3, 2};
        Q027_M1 exe = new Q027_M1();
        for (int i = 0; i < inputs.length; i++) {
            int[] input = inputs[i];
            int res = exe.removeElement(input, vals[i]);
            System.out.println(res);
            for (int j = 0; j < res; j++) {
                System.out.print(input[j] + ",");
            }
            System.out.println();
        }
    }

    /**
     * 通常可能会想到用双重循环，两个指针。
     * 1. 快指针，知道后面的是相等
     *
     * 点评: 代码麻烦
     * */
    public int removeElement(int[] nums, int val) {

        int n = nums.length;
        int i=0, j = 0;
        for (i = 0; i < n; i++) {
            if (nums[i] != val) {
                continue;
            }
            j = Math.max(j, i + 1);
            boolean hasnt = true;
            for (; j < n; j++) {
                if (nums[j] != val) {
                    // nums[i] = nums[j];
                    Tools.swap(nums, i, j); // 这里用复制还不行, 后面不等值其实不应该在了, 但还会认为在
                    hasnt = false; // 有不等值复制过来
                    j++;
                    break;
                }
            }
            if (hasnt) {
                // 自 i 始, 只有相等值了->返回
                break;
            }
        }

        return i;
    }

}
